#include <stdexcept>

#ifndef __IterableClass__h
#define __IterableClass__h

class Iterable
{
	public:
		Iterable();
		class Slice
		{
			private:
				signed long int mStart,mEnd;
			public:
				Slice(signed long int aStart,signed long int aEnd);
				Slice(const Slice& );
				unsigned int start(unsigned int) const;
				unsigned int end(unsigned int) const;
		};
		class UnneededAllocation
		{
			private:
				unsigned int mNumRemaining;
			public:
				UnneededAllocation(unsigned int);
				unsigned int remaining();
		};
	protected:
		unsigned int mAlloc,mUsed;
		static unsigned int gBufferSize;
		virtual void Allocate(unsigned int);
		virtual unsigned int newSize(unsigned int);
};
#endif